const { shared } = wx.worklet
const GestureState = {
  POSSIBLE: 0,
  BEGIN: 1,
  ACTIVE: 2,
  END: 3,
  CANCELLED: 4
}

Page({
  data: {},
  onLoad(options) {
    const x = shared(0)
    const y = shared(0)
    const scale = shared(1)
    const rotation = shared(0)
    this.applyAnimatedStyle('.circle', () => {
      'worklet'
      return {
        transform: `translate(${x.value}px, ${y.value}px) rotate(${rotation.value}rad) scale(${scale.value})`
      }
    })
    this.x = x
    this.y = y
    this.scale = scale
    this.rotation = rotation
    this.lastScale = shared(1)
    this.lastRotation = shared(0)
  },
  // 处理手势协商
  // pointerCount：跟踪的手指数
  handleGesture(evt) {
    'worklet'
    console.log('handleGesture', evt)
    if (evt.pointerCount == 2) {
      this.handleScale(evt)
    } else {
      this.handleDrag(evt)
    }
  },
  // 双指场景处理放大 缩小
  // scale 放大缩小 倍率
  // rotation 旋转角（单位：弧度）
  handleScale(evt) {
    'worklet'
    this.scale.value = this.lastScale.value * evt.scale
    this.rotation.value = this.lastRotation.value + evt.rotation
  },
  // 单指 处理拖动事件
  // focalDeltaX 相对上一次 中心点在X轴方向移动的坐标
  // focalDeltaY 相对上一次 中心点在Y轴方向移动的坐标
  handleDrag(evt) {
    'worklet'
    if (evt.state === GestureState.ACTIVE) {
      this.x.value += evt.focalDeltaX
      this.y.value += evt.focalDeltaY
    }
  },
  // 双击事件
  // 双击还原
  handleDoubleTap(evt) {
    'worklet'
    this.x.value = 0
    this.y.value = 0
    this.scale.value = 1
    this.rotation.value = 0
    this.lastRotation.value = 0
    this.lastScale.value = 1
  }
})
